package com.wangp.mywrite.encode_decode;

import java.util.Base64;

/**
 * @author: wp
 * @date: 2023/5/26 10:49:15
 * @desc: <a href="https://en.wikipedia.org/wiki/Base64">base64编码表</a>
 **/
public class Base64Demo {

    public static void main(String[] args) {
        threeBitToBase64();
        twoBitToBase64();
        oneBitToBase64();
    }

    private static void threeBitToBase64() {
        // ASCII码: ABC -> 65,66,67
        // 转二进制: A -> 0100 0001   B -> 0100 0010  C -> 0100 0011
        // ABC ->  0100 0001 0100 0010 0100 0011
        // 按照6位转成四个base64编码
        // 010000 010100 001001 000011
        // 16 20 9 3
        // 查 base64 编码表
        // QUJD
        byte[] bytes = "ABC".getBytes();
        byte[] encodeBytes = Base64.getEncoder().encode(bytes);
        String encodeStr = new String(encodeBytes);
        System.out.println(encodeStr);
    }

    private static void twoBitToBase64() {
        // ASCII码: AB -> 65,66
        // 转二进制: A -> 0100 0001   B -> 0100 0010
        // AB ->  0100 0001 0100 0010
        // 按照6位转成三个base64编码
        // 010000 010100 001000
        // 16 20 8
        // 查 base64 编码表
        // QUI=
        byte[] bytes = "AB".getBytes();
        byte[] encodeBytes = Base64.getEncoder().encode(bytes);
        String encodeStr = new String(encodeBytes);
        System.out.println(encodeStr);
    }

    private static void oneBitToBase64() {
        // ASCII码: A -> 65
        // 转二进制: A -> 0100 0001
        // A ->  0100 0001
        // 按照6位转成2个base64编码
        // 010000 010000
        // 16 16
        // 查 base64 编码表
        // QQ==
        byte[] bytes = "A".getBytes();
        byte[] encodeBytes = Base64.getEncoder().encode(bytes);
        String encodeStr = new String(encodeBytes);
        System.out.println(encodeStr);
    }
}
